#include <functional>
#include <iostream>
#include <cstdarg>
#include <initializer_list>
// 使用递归处理可变参数
void printArgsRecursively(int count, ...) {
    va_list args;
    va_start(args, count);

    // 递归函数，用于处理并打印参数
    std::function<void(int)> recursivePrint = [&](int n) {
        if (n > 0) {
            // 获取下一个参数（假设是int类型）
            int value = va_arg(args, int);
            std::cout << value << " ";
            recursivePrint(n - 1);
        }
    };

    recursivePrint(count);
    va_end(args);
    std::cout << std::endl;
}

// 使用指针偏移处理可变参数
void printArgsByPointer(int count, ...) {
    va_list args;
    va_start(args, count);

    for (int i = 0; i < count; i++) {
        // 获取下一个参数（假设是int类型）
        int value = va_arg(args, int);
        std::cout << value << " ";
    }

    va_end(args);
    std::cout << std::endl;
}
int sum(std::initializer_list<int> list) {
    int total = 0;
    for (int x : list) {
        total += x;
    }
    return total;
}
int main() {
    // 调用使用递归处理的函数
    std::cout << "Recursively:" << std::endl;
    printArgsRecursively(5, 1, 2, 3, 4, 5);

    // 调用使用指针偏移的函数
    std::cout << "By pointer offset:" << std::endl;
    printArgsByPointer(5, 6, 7, 8, 9, 10);

    std::cout << "Sum: " << sum({1, 2, 3, 4, 5}) << std::endl;
    return 0;
}